diff options
| author | Dawid Rycerz <dawid@rycerz.xyz> | 2025-07-21 21:56:55 +0300 |
|---|---|---|
| committer | Dawid Rycerz <dawid@rycerz.xyz> | 2025-07-21 21:56:55 +0300 |
| commit | c735556726e75428550a3d28a2cf58e2c8490b7d (patch) | |
| tree | fd0ae29d1636b825abeedff6b99d3376bb383135 /src/pages/[...blog]/index.astro | |
Initial template
Diffstat (limited to 'src/pages/[...blog]/index.astro')
| -rw-r--r-- | src/pages/[...blog]/index.astro | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/pages/[...blog]/index.astro b/src/pages/[...blog]/index.astro new file mode 100644 index 0000000..421927c --- /dev/null +++ b/src/pages/[...blog]/index.astro @@ -0,0 +1,54 @@ +--- +import type { InferGetStaticPropsType, GetStaticPaths } from 'astro'; + +import merge from 'lodash.merge'; +import type { ImageMetadata } from 'astro'; +import Layout from '~/layouts/PageLayout.astro'; +import SinglePost from '~/components/blog/SinglePost.astro'; +import ToBlogLink from '~/components/blog/ToBlogLink.astro'; + +import { getCanonical, getPermalink } from '~/utils/permalinks'; +import { getStaticPathsBlogPost, blogPostRobots } from '~/utils/blog'; +import { findImage } from '~/utils/images'; +import type { MetaData } from '~/types'; +import RelatedPosts from '~/components/blog/RelatedPosts.astro'; + +export const prerender = true; + +export const getStaticPaths = (async () => { + return await getStaticPathsBlogPost(); +}) satisfies GetStaticPaths; + +type Props = InferGetStaticPropsType<typeof getStaticPaths>; + +const { post } = Astro.props as Props; + +const url = getCanonical(getPermalink(post.permalink, 'post')); +const image = (await findImage(post.image)) as ImageMetadata | string | undefined; + +const metadata = merge( + { + title: post.title, + description: post.excerpt, + robots: { + index: blogPostRobots?.index, + follow: blogPostRobots?.follow, + }, + openGraph: { + type: 'article', + ...(image + ? { images: [{ url: image, width: (image as ImageMetadata)?.width, height: (image as ImageMetadata)?.height }] } + : {}), + }, + }, + { ...(post?.metadata ? { ...post.metadata, canonical: post.metadata?.canonical || url } : {}) } +) as MetaData; +--- + +<Layout metadata={metadata}> + <SinglePost post={{ ...post, image: image }} url={url}> + {post.Content ? <post.Content /> : <Fragment set:html={post.content || ''} />} + </SinglePost> + <ToBlogLink /> + <RelatedPosts post={post} /> +</Layout> |
